perm filename JUST.OLD[XAP,BGB] blob
sn#052886 filedate 1973-07-06 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 SUBR(TEXT) Put character into line buffer and test overflow
00007 00003 SUBR(LBFLUSH) Flush line buffer
00012 ENDMK
⊗;
SUBR(TEXT) ;Put character into line buffer and test overflow
BEGIN TEXT
LAC 1,CHAR
CAR A00(1) ;SPECIAL CHARACTER?
JUMPN 0,COMMAND ;YES, REQUIRES SPECIAL HANDLING
↑TEXT2: SETZM CRFLAG
SETZM SPFLAG
TJLOAD: SKIPE TJPTR ;Is line buffer set up?
GO TJLOA1 ;Yes
LAC 0,[POINT 7,LINBUF]
DAC 0,TJPTR ;Setup pointer to end of pointer
SETZM TJSPTR ;Clear pointer to last space
SETZM TJSCNT ;Clear space count
SETZM TJSPOS ;Clear column of space
SETZM TJHEIGHT ;Clear maximum height for row
SETZM TJDEPTH ;Clear maximum depth for row
SETZM TJODEPTH ;Clear old maximum depth for row
LACI 0,5*LINLEN ;Setup character count
DAC 0,TJCNT
LAC 0,COL
DAC 0,TJLMAR ;Left margin for text justification.
LAC 0,RMAR
DAC 0,TJRMAR ;Rigth margin for text justification,
DAC 0,TJSPOS
SETOM TJFONT ;Force initial font select
TJLOA1: SKIPN TJMODE
GO TJLOA4
LAC 0,COL ;Check for overflow
CAMGE 0,RMAR
GO TJLOA4
CALL LBFLUSH ;Flush line buffer
SETOM LFFLAG
LAC 0,LMAR
DAC 0,TJLMAR
DAC 0,COL
TJLOA4: LAC 2,FONT ;Pick up current font
CAMN 2,TJFONT ;Same as previous?
GO TJLOA3 ;Yes
LACI 0,177 ;No, same change, and output escape
IDPB 0,TJPTR
SOSG TJCNT ;End test
CALL LBLOSE
IDPB 2,TJPTR ;Output font number
SOSG TJCNT ;End test
CALL LBLOSE
DAC 2,TJFONT ;Remember current font
SKIPN 2,FONTAB(2) ;Make sure there is a font
GO [ FATAL<NO FONT DEFINED> ]
LAC 0,203(2) ;Pick up height above baseline
CAMLE 0,TJHEIGHT ;Update max. height
DAC 0,TJHEIGHT ;New max. height
LAC 0,201(2) ;Pick up total height
SUB 0,203(2) ;Subtract height above baseline to get depth
CAMLE 0,TJDEPTH ;Update max. depth
DAC 0,TJDEPTH
CAIE 1," " ;Space is a special case
POP0J
LAC 0,TJPTR ;Remember pointer to last character before space
DAC 0,TJSPTR
LAC 0,COL
DAC 0,TJSPOS
AOS TJSCNT
POP0J
TJLOA3: LAC 2,FONTAB(2) ;Fetch font pointer
ADD 2,1 ;Update column
CAR 2,(2)
ADDM 2,COL
IDPB 1,TJPTR ;Deposit character in line buffer
SOSLE TJCNT
POP0J
LBLOSE: FATAL<LINE BUFFER FULL!>
COMMAND:CAIN 1," "
GO [ SKIPE CRFLAG
CALL LBFLUSH
SETZM CRFLAG
SKIPE SPFLAG
GO [ SKIPLE TJMODE
POP0J
GO TJLOAD ]
SETOM SPFLAG
GO TJLOAD ]
CAIN 1,11
GO [ LAC 1,COL
DAC 1,TJRMAR
DAC 1,TJSPOS
LAC 1,TJPTR
DAC 1,TJSPTR
AOS TJSCNT
PUSH P,0
CALL LBFLUSH
SETZM CRFLAG
SETZM SPFLAG
POPJ P,]
CAIN 1,15
GO [ SKIPLE TJMODE
GO [ SETOM CRFLAG
LACI 1," "
SKIPN SPFLAG
GO TJLOAD
POP0J ]
CALL LBFLUSH
LAC 1,LMAR
DAC 1,COL
DAC 1,TJLMAR
SETOM CRFLAG
POP0J ]
CAIN 1,12
GO [ SKIPLE TJMODE
POP0J
CALL LBFLUSH
LAC 1,COL
DAC 1,TJLMAR
SETOM LFFLAG
SETZM SPFLAG
POP0J ]
CAIN 1,14
GO [ PUSH P,0
GO LBFLUSH ]
GO @0
BEND TEXT
SUBR(LBFLUSH) ;Flush line buffer
BEGIN LBFLUSH
PTR←16
MODE←15
SPACNT←14
EXTRA←13
SKIPN TJPTR ;Empty check!
POP0J
PUSH P,1 ;Save ACS
PUSH P,EXTRA
PUSH P,SPACNT
PUSH P,MODE
PUSH P,PTR
PUSH P,FONT ;Save current font number
PUSH P,CHAR ;Save current character
LOOP0: LAC PTR,[POINT 7,LINBUF];Init. line buffer pointer
CAMN PTR,TJPTR ;Another empty check
GO RET
LAC MODE,TJMODE
SKIPN LFFLAG ;Has line feed been accounted for?
GO LFOK
;The following 5 lines of code is inadaquate but will have to do for awhile.
LAC 1,TJODEPTH ;Do line feed
CAMGE 1,TJDEPTH
LAC 1,TJDEPTH ;Use max of current and last depth
ADD 1,TJHEIGHT ;Plus height
ADD 1,XLINE
ADDM 1,ROW
LAC 1,TJDEPTH
DAC 1,TJODEPTH
SETZM LFFLAG
CALL ROWCHK ;End test
LFOK: LAC EXTRA,TJRMAR ;Calculate number of unused columns
SUB EXTRA,TJSPOS
LAC 1,TJLMAR
DAC 1,COL
JUMPE MODE,[ LAC 1,TJPTR ;CLIP mode uses end pointer instead
DAC 1,TJSPTR ;of space pointer
GO .+1 ]
SKIPE TJSPTR
GO LOOP1
LAC 1,TJPTR
DAC 1,TJSPTR
LOOP1: CAMN PTR,TJSPTR ;Done yet?
GO MOVTXT ;Yes
ILDB 1,PTR ;No, pick up another character
CAIN 1,177 ;Font select?
GO [ ILDB 1,PTR
CAIN 1,177
GO .+1 ;No, escape for Rubout
DAC 1,FONT ;Yes, change fonts
GO LOOP1 ]
DAC 1,CHAR
CAIN 1," " ;If space and
CAIE MODE,1 ;iF double justified.
GO [ CALL PRINT ;Vanilla flavored character
GO LOOP1 ]
ADDSPA: LAC 0,EXTRA ;Calculate addition to space size
IDIV 0,TJSCNT
SUB EXTRA,0 ;Subtract from unused columns
SOSGE TJSCNT ;Decrement count of spaces
HALT . ;Loser!
LAC 1,FONT ;Fetch space size
SKIPN 1,FONTAB(1)
GO [ FATAL<NO FONT DEFINED> ]
HLRZ 1," "(1)
ADD 1,0 ;Add extra space to be added
ADDM 1,COL
GO LOOP1
MOVTXT: LAC PTR,[POINT 7,LINBUF];Move remainder of line to beginning
LAC EXTRA,TJSPTR
JUMPLE MODE,MOVTX1
LDB 1,EXTRA
CAIN 1," "
IBP 1,EXTRA
MOVTX1: LACI 0,5*LINLEN ;Setup character count
DAC 0,TJCNT
LACI 1,177
IDPB 1,PTR
SOS TJCNT
LAC 1,FONT
IDPB 1,PTR
SOS TJCNT
LOOP3: SKIPN 1,FONTAB(1)
GO [ FATAL<NO FONT DEFINED!> ]
LAC 0,203(1)
CAMLE 0,TJHEIGHT
DAC 0,TJHEIGHT ;Init. maximum height for row
LAC 0,201(1)
SUB 0,203(1)
CAMLE 0,TJDEPTH
DAC 0,TJDEPTH ;Init. maximum depth for row
LOOP2: CAMN EXTRA,TJPTR ;At end yet?
GO SETPAR
ILDB 1,EXTRA
IDPB 1,PTR
SOS TJCNT
CAIE 1,177
GO LOOP2
ILDB 1,EXTRA
IDPB 1,PTR
SOS TJCNT
CAIN 1,177
GO LOOP2
GO LOOP3
SETPAR: DAC PTR,TJPTR ;Setup pointer to end of pointer
LAC 1,RMAR
DAC 1,TJRMAR
SETZM TJSPTR ;Clear pointer to last space
SETZM TJSCNT ;Clear space count
JUMPL MODE,LOOP0
RET: POP P,CHAR ;Restore character
POP P,FONT ;Restore font number
POP P,PTR ;Restore ACS
POP P,MODE
POP P,SPACNT
POP P,EXTRA
POP P,1
POP0J
BEND LBFLUSH
LBALL: PUSH P,TJMODE
SETOM TJMODE
CALL LBFLUSH
POP P,TJMODE
POP0J